﻿using UnityEngine;
using System.Collections;

public class CameraRTS : MonoBehaviour
{

    // CameraControl
	public float ScrSpeed = 10f;
	public float ZoneMorte = 0.95f;
	public float ZoomIn = 10f;
	public float ZoomOut = 100f;

	// Camera Limits
	public GameObject _GameSpaceCenter;
	private Transform _GameSpaceCenterPosition;

	public float _xLimits;
	public float _zLimits;


	void Start (){
		_GameSpaceCenterPosition = _GameSpaceCenter.transform;
	}

    void Update()
    {
		CameraControl ();
    }
	void LateUpdate (){
		CameraLimiter ();
	}

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////CAMERA CONTROL////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

	void CameraControl ()
	{
		/*Zoom In/Out
         * Ceci n'est pas un "vrai" zoom, c'est uniquement une modification de la hauteur de la caméra.
         * ZoomIn et ZoomOut servent à définir les bornes du "zoom".
        */
		
		float Molette;
		Vector2 MPos = Vector3.zero;
		Vector3 ScrMove = transform.position;
		
		
		Molette = Input.GetAxis("Mouse ScrollWheel") * 20;
		
		if (ScrMove.y - Molette >= ZoomIn && ScrMove.y - Molette <= ZoomOut)
		{
			ScrMove.y -= Molette;
		}
		if (ScrMove.y < ZoomIn) { ScrMove.y = ZoomIn; }
		if (ScrMove.y > ZoomOut) { ScrMove.y = ZoomOut; }
		
		/*  Déplacement Caméra
         * Récupère la position de la sourie dans l'écran et déplace la caméra sur l'axe.
         * Vous pouvez régler la largeur de la zone provoquant les déplacement en modifiant
         * la variable ZoneMorte.
         * Vous pouvez modifier la vitesse de translation en modifiant la valeur de ScrSpeed.
        */
		
		MPos.Set(Input.mousePosition.x / Screen.width, Input.mousePosition.y / Screen.height);
		
		
		if (MPos.x < 1 - ZoneMorte)
		{
			ScrMove.x -= Time.deltaTime * ScrSpeed * ScrMove.y / 10;
		}
		else if (MPos.x > ZoneMorte)
		{
			ScrMove.x += Time.deltaTime * ScrSpeed * ScrMove.y / 10;
		}
		
		
		if (MPos.y < 1 - ZoneMorte)
		{
			ScrMove.z -= Time.deltaTime * ScrSpeed * ScrMove.y / 10;
		}
		else if (MPos.y > ZoneMorte)
		{
			ScrMove.z += Time.deltaTime * ScrSpeed * ScrMove.y / 10;
		}
		
		transform.position = ScrMove;
	}

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////CAMERA CONTROL////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	void CameraLimiter() {
		//Calculate the limits depending of the wind
		float tmpxLimits;
		float tmpzLimits;

			tmpxLimits = _GameSpaceCenterPosition.position.x + _xLimits;
			tmpzLimits = _GameSpaceCenterPosition.position.z + _zLimits;
		// Apply the limits on the camera if necessary
		if (this.transform.position.x > _GameSpaceCenterPosition.position.x + _xLimits) {
			this.transform.position = new Vector3(_GameSpaceCenterPosition.position.x + _xLimits, this.transform.position.y, this.transform.position.z);
		}else if (this.transform.position.x < _GameSpaceCenterPosition.position.x - _xLimits) {
			this.transform.position = new Vector3(_GameSpaceCenterPosition.position.x - _xLimits, this.transform.position.y, this.transform.position.z);
		}

		if (this.transform.position.z > _GameSpaceCenterPosition.position.z + _zLimits){
			this.transform.position = new Vector3(this.transform.position.x, this.transform.position.y, _GameSpaceCenterPosition.position.z + _zLimits);
		}else if (this.transform.position.z< _GameSpaceCenterPosition.position.z - _zLimits){
			this.transform.position = new Vector3(this.transform.position.x, this.transform.position.y, _GameSpaceCenterPosition.position.z - _zLimits);
		}
	}
}
